모의해킹

호스트기반모의해킹_22_패스워드 크래킹

작성자 : Heehyeon Yoo|2025-12-02
# 모의해킹# Hash Cracking# John the Ripper# Hashcat# MD5

1. 개요

데이터베이스 덤프나 시스템 파일(Example: /etc/shadow) 탈취를 통해 획득한 비밀번호는 대부분 해시(Hash) 형태로 저장되어 있다. 이를 평문(Plaintext)으로 복원하는 과정을 패스워드 크래킹(Password Cracking) 또는 해시 크래킹이라고 한다.

1.1 해시(Hash) vs 암호화(Encryption)

  • 해시: 단방향 함수(One-way Function). 수학적으로 역산이 불가능하다. (예: 사과 -> 사과주스는 가능하지만, 사과주스 -> 사과는 불가능)
  • 용도: 데이터 무결성 검증, 비밀번호 저장.
  • 종류: MD5, SHA-1, SHA-256, Bcrypt, NTLM 등.

2. 크래킹 원리

해시는 역산이 불가능하므로, 수학적인 해독이 아니라 "추측 후 비교" 방식을 사용한다.

  1. 공격자가 예상되는 평문(예: password123)을 골라 해시 함수에 넣는다.
  2. 생성된 해시 값과 타겟 해시 값을 비교한다.
  3. 일치하면 크래킹 성공.
  • 기법:
    • 사전 공격(Dictionary Attack): 단어장(Wordlist)에 있는 단어만 대입.
    • 브루트 포스(Brute Force): 모든 문자 조합 대입. (시간 소요 큼)
    • 레인보우 테이블(Rainbow Table): 미리 계산된 해시 테이블을 사용하여 검색 속도를 높임.

3. 주요 도구 및 실습

3.1 해시 식별 (Hash Identification)

크래킹 전, 해당 해시가 어떤 알고리즘(MD5, SHA256 등)인지 알아야 한다.

  • 도구: hash-identifier
    hash-identifier
    # 해시 값을 입력하면 가능한 알고리즘 목록(Possible Hashes)을 출력한다.
    

3.2 John the Ripper (JtR)

가장 대중적인 CPU 기반 패스워드 크래커. 사용자 편의성이 높다.

기본 사용법 (Basic Cracking)

# -wordlist: 사용할 사전 파일
# -format: 해시 알고리즘 지정 (자동 탐지도 가능하지만, 지정하는 것이 빠름)
john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5 hashes.txt

결과 확인

# 이미 크래킹된 결과는 다시 돌려도 안 보일 수 있다. --show 옵션 사용.
john --show hashes.txt

3.3 다양한 포맷 크래킹

단순 텍스트 해시뿐만 아니라, 다양한 파일의 암호도 크래킹 가능하다. 이를 위해 파일을 JtR이 이해할 수 있는 포맷으로 변환하는 *2john 툴들을 사용한다.

  1. 리눅스 Shadow 파일: unshadow [passwd] [shadow] > unshadowed.txt
  2. SSH 개인키: ssh2john id_rsa > key.hash
  3. ZIP 파일: zip2john secured.zip > zip.hash
    • 변환 후 john zip.hash로 크래킹 수행.

4. 실무에서는?

  1. Hashcat 활용:
    • 실무에서는 GPU 연산이 지원되는 Hashcat이 훨씬 빠르고 강력하여 주력으로 사용된다. John the Ripper는 다양한 포맷 지원과 유연성 때문에 보조 도구로 많이 쓰인다.
  2. 비밀번호 정책 우회:
    • 해시 크래킹은 오프라인(Offline) 공격이므로, 시스템의 계정 잠금(Account Lockout) 정책에 영향을 받지 않는다. 획득한 해시만 있다면 무제한으로 시도 가능하다.